package com.gem.day02;

/**
 * 本类用来演示Java常量和变量
 * 
 * 常量(字面量): 固定不变的量
 * 变量: 系统中可变数据值的量
 * 
 * Java是一种强类型的编程语言,意味着定义任何数据时都必须指定数据类型,
 * Java中数据类型包括两大类
 * 1.基本类型(8种),4种整数类型,2种小数类型,1种字符型,1种布尔类型
 * 2.对象类型(a.内置对象类型,b.自定义对象类型)[无数种]
 *    内置对象类型,即Java官方写好的类,例如:System,String...
 *    自定义对象类型,程序员写的任何Java类都可以认为是一个对象类型
 * 
 * @author easonsy
 * 2020年7月16日 下午1:43:51
 */
public class VariableDemo {
	public static void main(String[] args) {
		//数字类型常量
		System.out.println(123);

		//字符串类型常量
		System.out.println("Hello");
		//字符型常量
		System.out.println('A');
		//布尔类型常量
		System.out.println(true);
		System.out.println(false);

		System.out.println("-------------------------");

		String name1 = "沈腾";
		String name2 = "贾玲";
		System.out.println(name1 + ":You Jump,I Jump!");
		System.out.println(name2 + ":You Jump,I Jump!");
		System.out.println(name1 + ":You Jump,I Jump!");
		System.out.println(name2 + ":You Jump,I Jump!");

		System.out.println("-------------------------");

		//定义变量,注意:此处添加final表示该变量是一个常量,无法改变值
		//作用:常量的作用提高代码的可读性
		//注意:常量命名要求,全部采用大写字母,中间用_隔开
		final int ROW_EACH_PAGE = 5;
		//修改变量值(不能修改)
		//num = 5;
		System.out.println(ROW_EACH_PAGE);

		System.out.println("-------------------------");

		//整数变量
		byte b = 127;//字节型[-128~127]
		short s = 32767;//短整型[-32768~32767]

		//注意:实战开发中一般直接使用int或者long来存储整数
		//注意:Java中任意写一个整数,默认是int类型!
		int i = 2147483647;//整型[-2147483648~2147483647]
		long l = 100L;//长整型[-2^63~2^63-1]

		//思考题:
		System.out.println(1L * 1000000 * 1000000 * 1000);

		//小数类型(浮点数类型)
		//注意:float是单精度浮点数类型,double是双精度浮点数类型
		//注意:Java中任意写一个小数是double类型!
		//注意:f表示把3.14转换成float类型,但是转换过程中可能丢失精度!
		float f = 3.14f;
		double d = 3.14;

		//字符型
		//注意:A=65,a=97,0=48
		char c = 'A';//65
		//注意:字符型本质底层是数字(ascii),所以可以进行计算,计算结果为数字类型
		//System.out.println(c + 1);
		//如果还要得到字符,则可以转换数字类型成字符型
		System.out.println((char) (c + 1));

		//布尔类型
		boolean bool1 = true;
		boolean bool2 = false;

		System.out.println("-------------------------");

		//Java强调数据类型,所以在开发过程中经常需要定义不同的数据类型并且在不同的数据类型之间相互转化
		//1.自动类型转换(隐式类型转换),小数据类型往大数据类型转化
		long ll = 100;

		//2.强制类型转换(显式类型转换),大数据类型往小数据类型转化
		//注意:可能存在小数据类型无法保存完整数据的情况,则可能造成数据精度丢失
		//注意:Java中两种不同数据类型进行运算,结果是数据类型较大的一方!

		//不丢失
		float ff = (float) 3.14;
		//丢失
		int ii = (int) 3.14;

		//另外:long,float,double类型转换可以简写(L/l,F/f,D/d)
		//例如:
		double dd = 3d;
	}
}
